//<p>有 <code>n</code> 个气球，编号为<code>0</code> 到 <code>n - 1</code>，每个气球上都标有一个数字，这些数字存在数组&nbsp;<code>nums</code>&nbsp;中。</p>
//
//<p>现在要求你戳破所有的气球。戳破第 <code>i</code> 个气球，你可以获得&nbsp;<code>nums[i - 1] * nums[i] * nums[i + 1]</code> 枚硬币。&nbsp;这里的 <code>i - 1</code> 和 <code>i + 1</code> 代表和&nbsp;<code>i</code>&nbsp;相邻的两个气球的序号。如果 <code>i - 1</code>或 <code>i + 1</code> 超出了数组的边界，那么就当它是一个数字为 <code>1</code> 的气球。</p>
//
//<p>求所能获得硬币的最大数量。</p>
//
//<p>&nbsp;</p> 
//<strong>示例 1：</strong>
//
//<pre>
//<strong>输入：</strong>nums = [3,1,5,8]
//<strong>输出：</strong>167
//<strong>解释：</strong>
//nums = [3,1,5,8] --&gt; [3,5,8] --&gt; [3,8] --&gt; [8] --&gt; []
//coins =  3*1*5    +   3*5*8   +  1*3*8  + 1*8*1 = 167</pre>
//
//<p><strong>示例 2：</strong></p>
//
//<pre>
//<strong>输入：</strong>nums = [1,5]
//<strong>输出：</strong>10
//</pre>
//
//<p>&nbsp;</p>
//
//<p><strong>提示：</strong></p>
//
//<ul> 
// <li><code>n == nums.length</code></li> 
// <li><code>1 &lt;= n &lt;= 300</code></li> 
// <li><code>0 &lt;= nums[i] &lt;= 100</code></li> 
//</ul>
//
//<div><li>👍 1347</li><li>👎 0</li></div>

#include <bits/stdc++.h>
using namespace std;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
    int maxCoins(vector<int>& nums) {
        nums.insert(nums.begin(), 1);
        nums.push_back(1);
        map<int, vector<int>, greater<int>> map;
        for (int i = 1; i < nums.size() - 1; i++) {
            int j = nums[i] * nums[i - 1] * nums[i + 1];
            map[j].push_back(i);
        }
        int n = nums.size();
        int ans = 0;
        while (n > 0) {
            int k = map.begin()->first;
            ans += k;
            int i = map[k].back();
            if(i > 1) {
                map[nums[i] * nums[i - 1] * nums[i - 2]];
            }
        }
        cout << (map.begin()->first) << endl;
        return 0;
    }
};

//leetcode submit region end(Prohibit modification and deletion)


int main() {
    Solution s;
    //vector<int> data{7, 1, 5, 3, 6, 4};
    //auto ans = s.twoSum(data,11);
    //cout<<endl;
}
